/*  这里进行所有数据的初始化工作 */

class DataFactory {

	//数据源 博客文章列表
	public static List blogList=[];
	
	//数据源 博客分类Map
	
	public static categoryMap=Config.categoryMap;

	//数据源 博客tagList
	
	public static List tagList=[];
	
	/* 模板文件 */
	public static final String indexTemplate=(new File(Config.indexTemplate).text);
	public static final String categoryTemplate=(new File(Config.categoryTemplate).text);
	public static final String tagTemplate=(new File(Config.tagTemplate).text);
	public static final String taglistTemplate=(new File(Config.taglistTemplate).text);
	public static final String detailTemplate=(new File(Config.detailTemplate).text);
	public static final String rssTemplate=(new File(Config.rssTemplate).text);
	public static final String searchTemplate=(new File(Config.searchTemplate).text);
	
	private static initBlogList()
	{
		def input = new XmlParser().parse(new File(Config.dataSource));
		def title= input.channel.title[0].text()
		def itemList=input.channel.item
		
		for(item in itemList)
		{
		 Blog blog=createBlog(item);
		 blog.init();
		 blogList.add(blog);
		 //正式环境需注释掉下行
		 categoryMap[blog.category]=Math.abs(blog.category.hashCode());
		}
		
	}
	
	/* 此方法依赖于initBlogList方法 */
	
	private static initTags()
	{
		List list=[];
		for(blog in blogList)
		{
			list=list+blog.tagList;
		}
		list.unique();
		tagList=list.collect{
			Tag tag=new Tag(name:it);
			for(blog in blogList)
			{
				if(blog.getTagList().contains(it))
				{
				tag.getBlogList().add(blog);
				tag.setUseCount(tag.getUseCount()+1);
				tag.setLastmod(blog.simpleDate);
				}
			}
			return tag;
		}
		//list按照使用次数逆序排列
		tagList.sort(){b,a->a.useCount <=> b.useCount};
		
	}
	

	private static Blog createBlog(item)
	{
	  	return new Blog(title:item.title.text(),link:item.link.text(),category:item.category.text(),pubDate:item.pubDate.text(),origContent:item.description.text(),commentLink:item.comments.text());
	  	
	}
	
	/*初始化文件系统*/
	
	public static initDir()
	
	{
		Config.folderMap.each{
			File file=new File(Config.topFolder+it.value);
			if(!file.exists())
			{
				file.mkdirs();
			}
		}
		
	}	
	
	public static init()
	{
		if(blogList.empty)
		{
			println "start init bloglist...";
			initBlogList();
			println "start init tags...";
			initTags();
			println "start init fileSystem...";
			initDir();
		}
		
	}
	
	
 static void main(args) {
		  
	 
		init();  
		
		for(blog in blogList)
		{
			println 	blog.summary;
		}
		
		
		/*
		for(category in categoryMap)
		{
			println category.key+':'+category.value;
		}
		
	
		for(tag in tagList)
		{
			println tag.name+':'+tag.useCount;
		}
		*/
	}

}